package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.ComprobanteDao;
import edu.upc.clase.demo.entity.Comprobante;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Carlos
 */
@Repository
public class ComprobanteDaoImpl extends SimpleJdbcDaoSupport implements ComprobanteDao {

  private static Logger log = LoggerFactory.getLogger(ComprobanteDaoImpl.class);

  @Autowired
  public ComprobanteDaoImpl(DataSource dataSource) {
    log.info("Asignando el dataSource");
    setDataSource(dataSource);
  }

  @Override
  public Integer insertar(Comprobante comprobante) {

    getJdbcTemplate().update(
            "insert into comprobante" + "\n"
            + " (fechaRegistro, subTotal, igv, total, numeroTarjetaPago, nroConstanciaPago, fechaCaducidad, direccionFacturacion, codigoVerificacion, idBanco, idPlanNegocio, idEstado, idUsuario)" + "\n"
            + " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            comprobante.getFechaRegistro(), comprobante.getSubTotal(), comprobante.getIgv(), comprobante.getTotal(),
            comprobante.getNumeroTarjetaPago(), comprobante.getNrocConstanciaPago(), comprobante.getFechaCaducidad(),
            comprobante.getDireccionFacturacion(), comprobante.getCodigoVerificacion(), comprobante.getIdBanco(),
            comprobante.getIdPlanNegocio(), comprobante.getIdEstado(), comprobante.getIdUsuario());
    return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
  }

  @Override
  public void actualizar(Comprobante comprobante) {
    getJdbcTemplate().update(
            "update comprobante set fechaRegistro = ?,subTotal = ?,igv = ?,total = ?,numeroTarjetaPago = ?,nroConstanciaPago = ?,fechaCaducidad = ?,direccionFacturacion = ?,codigoVerificacion = ?,idBanco = ?,idPlanNegocio = ?,idEstado = ?,idUsuario = ? " + "\n"
            + " where idcomprobante = ?",
            comprobante.getFechaRegistro(), comprobante.getSubTotal(), comprobante.getIgv(), comprobante.getTotal(),
            comprobante.getNumeroTarjetaPago(), comprobante.getNrocConstanciaPago(), comprobante.getFechaCaducidad(),
            comprobante.getDireccionFacturacion(), comprobante.getCodigoVerificacion(), comprobante.getIdBanco(),
            comprobante.getIdPlanNegocio(), comprobante.getIdEstado(), comprobante.getIdUsuario(), comprobante.getIdComprobante());
  }

  @Override
  public void eliminar(Comprobante comprobante) {
    getJdbcTemplate().update(
            "delete from comprobante where idcomprobante = ?", comprobante.getIdComprobante());
  }

  @Override
  public List<Comprobante> buscarTodos() {
    return getSimpleJdbcTemplate().query("select * from comprobante",
            new BeanPropertyRowMapper<Comprobante>(Comprobante.class));

  }

  @Override
  public Comprobante buscar(Integer idComprobante) {
    try {
      return getSimpleJdbcTemplate().queryForObject("select * from comprobante where idComprobante = ?",
              new BeanPropertyRowMapper<Comprobante>(Comprobante.class), idComprobante);
    } catch (EmptyResultDataAccessException e) {
      return null;
    }
  }
}
